package com.itshizhan.designpattern.factory_method.framework;

/**
 * 即Creator 创建者
 * 负责生成Product的抽象类
 * 但是具体的处理则由子类ConcreteCreator决定决定
 * Creator角色对于实际负责生成实例的ConcreteCreator角色一无所知。
 * 唯一知道的是，只要调用Product角色和生成实例的方法，就可以生成Product的实例
 * 不用new关键字来生成实例
 *
 */
public abstract class Factory {
    public final Product create(String owner){
        Product p = createProduct(owner);
        registerProduct(p);
        return p;
    }

    /**
     * createProduct，生成具体的实例方法，子类必须实现
     * @param owner
     * @return
     */
    protected abstract Product createProduct(String owner);
    protected abstract void registerProduct(Product product);
}
